【OTRS:設定編】ロードバランサ (ELB) と OTRS (EC2) のセッション問題への対応
こんにちは、三井田です。
本日参加予定の[第3回]OTRS勉強会『進撃のOTRS!調査兵団の戦果発表セミナー』に先立ち、1つTipsを載せたいと思います。
はじめに:構成について
AWS上にOTRSを設置にあたり、ロードバランササービスである、Elastic Load Balancing (以下、ELB) を利用しています。次のようなメリットがあると考えるためです
- SSLターミネーションをロードバランサで行い;
- SSL証明書の管理、暗号化/復号化を担わせる
- OTRSインスタンスのSSL暗号化/復号化負荷を下げる
- 複数OTRSをぶら下げて冗長性を確保する
- フロント層(ELB)、アプリケーション層(EC2)、DB層(Amazon RDS)をきれいに分離する
冗長性確保に関しては、データベースにAmazon RDS for MySQLを用いるのですが、データベース上に登録された情報を基に挙動が決まる部分も多く、引続き調査中です。
このエントリでは、ELBのロードバランサ配下にOTRSを設置した時に顕在化した問題とそれに対する対処を紹介したいと思います。
症状:セッションがブツブツ切れる
- ログインしてチケットを処理したり、管理画面で設定を変更していると、頻繁にログイン画面に戻ってしまいます。
この症状により、設定を変更したはずなのに変更できていない、という状況にも頻繁に遭遇するようになりました。
解析:ログファイルを見てみる
Syslog経由でログを出力しているので、/var/log/messagesを見てみました。
Jun 4 08:25:46 ip-10-10-100-205 OTRS-CGI-0[1978]: [Notice][Kernel::System::AuthSession::DB::CheckSessionID] RemoteIP of 'lhkBVNlKA6zZjnnWifi6Tw1IPL2eDn26' (10.10.0.240) is different from registered IP (10.10.1.192). Invalidating session! Disable config 'SessionCheckRemoteIP' if you don't want this! Jun 4 08:25:46 ip-10-10-100-205 OTRS-CGI-0[1978]: [Notice][Kernel::System::AuthSession::DB::RemoveSessionID] Removed SessionID lhkBVNlKA6zZjnnWifi6Tw1IPL2eDn26.
RemoteIP of <略> (10.10.0.240) is different from registered IP (10.10.1.192)となっています。アクセス元IPが変わっているため、Invalidating session!とみなされ、Removed SessionIDされていることが分かりました。
これは、ブラウザからのリクエストが、各Availability Zoneのロードバランサ経由でOTRSへ流れるクロスゾーン負荷分散(Cross-Zone Load Balancing)の影響と判断することが出来ます。
参考:AWS ELBの社内向け構成ガイドを公開してみる 負荷分散編 – Cross-Zone Routingを踏まえて
対応:SessionCheckRemoteIP を Off にする
ログメッセージ内に、対応方法Disable config 'SessionCheckRemoteIP' if you don't want this!が載っていました。
早速、『管理』->『システムコンフィグ』から該当の設定をOffにしましょう。
検索ボックスに、『SessionCheckRemoteIP』を入力して検索すれば、『Core::Sessions』というサブグループがヒットします。 下記の画像のように『いいえ』を選択して、画面再下部の『更新』をクリックして適用しましょう。
この操作は、操作中にセッションが切れないよう、素早く行いましょう。また、変更後再度画面を開いて、設定が反映されたかを確認しましょう。
まとめ
今回の設定は、単体稼働ではなく、ロードバランサやプロキシなどの背後にOTRSを設置するときには、必須の設定になるかと思います。
もちろん、OTRS自体へのアクセスをロードバランサやプロキシに限定するなど、セキュリティに対する対策も忘れずに実施することが肝要です。
今後も、OTRSを導入して気づいた点や、ちょっとしたトラブルと対処をエントリーしていきたいと思います。